home *** CD-ROM | disk | FTP | other *** search
/ Dynamic HTML Construction Kit / Dynamic HTML Construction Kit.iso / earthlink / nscomm / java40.jar / netscape / softupdate / SoftwareUpdate.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-11-03  |  10.3 KB  |  520 lines

  1. package netscape.softupdate;
  2.  
  3. import java.util.Enumeration;
  4. import java.util.Vector;
  5. import netscape.javascript.JSObject;
  6. import netscape.security.AppletSecurity;
  7. import netscape.security.AppletSecurityException;
  8. import netscape.security.Principal;
  9. import netscape.security.PrivilegeManager;
  10. import netscape.security.Target;
  11. import netscape.security.UserDialogHelper;
  12. import netscape.security.UserTarget;
  13.  
  14. public final class SoftwareUpdate {
  15.    static final int nTargets = 3;
  16.    static String[] targetNames = new String[]{"LimitedInstall", "FullInstall", "SilentInstall"};
  17.    public static final int LIMITED_INSTALL = 0;
  18.    public static final int FULL_INSTALL = 1;
  19.    public static final int SILENT_INSTALL = 2;
  20.    protected static final String IMPERSONATOR = "Impersonator";
  21.    static final int BAD_PACKAGE_NAME = -200;
  22.    static final int UNEXPECTED_ERROR = -201;
  23.    static final int ACCESS_DENIED = -202;
  24.    static final int TOO_MANY_CERTIFICATES = -203;
  25.    static final int NO_INSTALLER_CERTIFICATE = -204;
  26.    static final int NO_CERTIFICATE = -205;
  27.    static final int NO_MATCHING_CERTIFICATE = -206;
  28.    static final int UNKNOWN_JAR_FILE = -207;
  29.    static final int INVALID_ARGUMENTS = -208;
  30.    static final int ILLEGAL_RELATIVE_PATH = -209;
  31.    static final int USER_CANCELLED = -210;
  32.    static final int INSTALL_NOT_STARTED = -211;
  33.    static final int SILENT_MODE_DENIED = -212;
  34.    static final int REBOOT_NEEDED = 999;
  35.    protected String packageName;
  36.    protected Vector installedFiles;
  37.    protected VersionInfo versionInfo;
  38.    protected String userPackageName;
  39.    private ProgressMediator progress;
  40.    private int userChoice;
  41.    private boolean silent;
  42.    private String installerJarName;
  43.    private String jarName;
  44.    private int zigPtr;
  45.    private Principal installPrincipal;
  46.  
  47.    public SoftwareUpdate(JSObject var1, String var2) {
  48.       this.userPackageName = var2;
  49.       this.installPrincipal = null;
  50.       this.packageName = null;
  51.       this.progress = null;
  52.       this.zigPtr = 0;
  53.       this.userChoice = -1;
  54.       this.VerifyJSObject(var1);
  55.       this.jarName = (String)var1.getMember("src");
  56.       this.silent = false;
  57.  
  58.       try {
  59.          var1.getMember("silent");
  60.          this.silent = (Boolean)var1.getMember("silent");
  61.       } catch (Throwable var3) {
  62.          System.out.println("Unexpected throw on silent");
  63.          this.silent = false;
  64.       }
  65.    }
  66.  
  67.    protected void finalize() throws Throwable {
  68.       super.finalize();
  69.       this.CleanUp();
  70.    }
  71.  
  72.    private native void VerifyJSObject(JSObject var1);
  73.  
  74.    private void InitializeInstallerCertificate() throws SoftUpdateException {
  75.       Object var1 = null;
  76.       var1 = this.getCertificates(this.zigPtr, this.installerJarName);
  77.       if (var1 == null) {
  78.          throw new SoftUpdateException(Strings.error_NoCertificate(), -204);
  79.       } else if (((Object[])var1).length > 1) {
  80.          throw new SoftUpdateException(Strings.error_TooManyCertificates(), -203);
  81.       } else {
  82.          this.installPrincipal = new Principal(14, (byte[])((Object[])var1)[0]);
  83.       }
  84.    }
  85.  
  86.    private void CheckSilentPrivileges() {
  87.       if (this.silent) {
  88.          try {
  89.             PrivilegeManager var1 = AppletSecurity.getPrivilegeManager();
  90.             Target var2 = Target.findTarget("Impersonator");
  91.             var1.enablePrivilege(var2);
  92.             Target var3 = Target.findTarget(targetNames[2]);
  93.             var1.enablePrivilege(var3, this.GetPrincipal());
  94.          } catch (Throwable var4) {
  95.             System.out.println(Strings.error_SilentModeDenied());
  96.             this.silent = false;
  97.          }
  98.       }
  99.    }
  100.  
  101.    private void RequestSecurityPrivileges(int var1) {
  102.       if (var1 != 0 && var1 != 1) {
  103.          var1 = 1;
  104.       }
  105.  
  106.       PrivilegeManager var2 = AppletSecurity.getPrivilegeManager();
  107.       Target var3 = Target.findTarget("Impersonator");
  108.       var2.enablePrivilege(var3);
  109.       Target var4 = Target.findTarget(targetNames[var1]);
  110.       var2.enablePrivilege(var4, this.GetPrincipal());
  111.    }
  112.  
  113.    protected final Principal GetPrincipal() {
  114.       return this.installPrincipal;
  115.    }
  116.  
  117.    protected final String GetUserPackageName() {
  118.       return this.userPackageName;
  119.    }
  120.  
  121.    protected final boolean GetSilent() {
  122.       return this.silent;
  123.    }
  124.  
  125.    protected final Enumeration GetInstallQueue() {
  126.       return this.installedFiles != null ? this.installedFiles.elements() : null;
  127.    }
  128.  
  129.    public Object GetFolder(String var1) {
  130.       FolderSpec var2 = null;
  131.  
  132.       try {
  133.          if (var1.compareTo("Installed") != 0) {
  134.             var2 = new FolderSpec(var1, this.packageName, this.userPackageName);
  135.             if (var1 == "User Pick") {
  136.                var2.GetDirectoryPath();
  137.             }
  138.          }
  139.  
  140.          return var2;
  141.       } catch (Throwable var3) {
  142.          return null;
  143.       }
  144.    }
  145.  
  146.    public Object GetComponentFolder(String var1) {
  147.       FolderSpec var3 = null;
  148.       String var2 = VersionRegistry.getDefaultDirectory(var1);
  149.       if (var2 == null) {
  150.          var2 = VersionRegistry.componentPath(var1);
  151.          int var4;
  152.          if (var2 != null && (var4 = var2.lastIndexOf(System.getProperty("file.separator"))) > 0) {
  153.             char[] var5 = new char[var4];
  154.             var2.getChars(0, var4, var5, 0);
  155.             var2 = new String(var5);
  156.          }
  157.       }
  158.  
  159.       if (var2 != null) {
  160.          var3 = new FolderSpec("Installed", var2, this.userPackageName);
  161.       }
  162.  
  163.       return var3;
  164.    }
  165.  
  166.    public Object GetWinProfile(Object var1, String var2) {
  167.       WinProfile var3 = null;
  168.       String var4 = System.getProperty("os.name");
  169.  
  170.       try {
  171.          if (this.packageName == null) {
  172.             throw new SoftUpdateException(Strings.error_WinProfileMustCallStart(), -211);
  173.          }
  174.  
  175.          if (var4.indexOf("Windows") >= 0 || var4.equals("Win32s")) {
  176.             var3 = new WinProfile(this, (FolderSpec)var1, var2);
  177.          }
  178.       } catch (SoftUpdateException var5) {
  179.          var3 = null;
  180.       }
  181.  
  182.       return var3;
  183.    }
  184.  
  185.    public Object GetWinRegistry() {
  186.       WinReg var1 = null;
  187.       String var2 = System.getProperty("os.name");
  188.  
  189.       try {
  190.          if (this.packageName == null) {
  191.             throw new SoftUpdateException(Strings.error_WinProfileMustCallStart(), -211);
  192.          }
  193.  
  194.          if (var2.indexOf("Windows") >= 0 || var2.equals("Win32s")) {
  195.             var1 = new WinReg(this);
  196.          }
  197.       } catch (Throwable var3) {
  198.          var1 = null;
  199.       }
  200.  
  201.       return var1;
  202.    }
  203.  
  204.    private native void OpenJARFile() throws SoftUpdateException;
  205.  
  206.    private native void CloseJARFile();
  207.  
  208.    private native Object[] getCertificates(int var1, String var2);
  209.  
  210.    protected String ExtractJARFile(String var1) throws SoftUpdateException, AppletSecurityException {
  211.       if (this.zigPtr == 0) {
  212.          throw new SoftUpdateException("JAR file\thas\tnot\tbeen opened", -207);
  213.       } else {
  214.          PrivilegeManager var3 = AppletSecurity.getPrivilegeManager();
  215.          Target var2 = Target.findTarget(targetNames[0]);
  216.          var3.checkPrivilegeEnabled(var2);
  217.          boolean var5 = false;
  218.          Object var6 = null;
  219.          var6 = this.getCertificates(this.zigPtr, var1);
  220.          if (var6 == null) {
  221.             throw new SoftUpdateException("Missing certificate for " + var1, -205);
  222.          } else {
  223.             for(int var4 = 0; var4 < ((Object[])var6).length; ++var4) {
  224.                Principal var7 = new Principal(14, (byte[])((Object[])var6)[0]);
  225.                if (this.installPrincipal.equals(var7)) {
  226.                   var5 = true;
  227.                   break;
  228.                }
  229.             }
  230.  
  231.             if (!var5) {
  232.                throw new SoftUpdateException(Strings.error_MismatchedCertificate() + var1, -206);
  233.             } else {
  234.                String var9 = this.NativeExtractJARFile(var1);
  235.                return var9;
  236.             }
  237.          }
  238.       }
  239.    }
  240.  
  241.    private native String NativeExtractJARFile(String var1) throws SoftUpdateException;
  242.  
  243.    public int StartInstall(String var1, VersionInfo var2, int var3) {
  244.       try {
  245.          if (var1 == null) {
  246.             throw new SoftUpdateException(Strings.error_BadPackageName(), -208);
  247.          } else {
  248.             char[] var4;
  249.             for(this.packageName = var1; this.packageName.endsWith("/"); this.packageName = new String(var4)) {
  250.                var4 = new char[this.packageName.length() - 1];
  251.                this.packageName.getChars(0, this.packageName.length() - 1, var4, 0);
  252.             }
  253.  
  254.             this.versionInfo = var2;
  255.             this.installedFiles = new Vector();
  256.             this.OpenJARFile();
  257.             this.InitializeInstallerCertificate();
  258.             this.CheckSilentPrivileges();
  259.             this.RequestSecurityPrivileges(var3);
  260.             this.progress = new ProgressMediator(this);
  261.             this.progress.StartInstall();
  262.             return 0;
  263.          }
  264.       } catch (SoftUpdateException var5) {
  265.          return var5.GetError();
  266.       } catch (Exception var6) {
  267.          ((Throwable)var6).printStackTrace();
  268.          return -201;
  269.       }
  270.    }
  271.  
  272.    protected void UserCancelled() {
  273.       this.userChoice = 0;
  274.       this.AbortInstall();
  275.    }
  276.  
  277.    protected void UserApproved() {
  278.       this.userChoice = 1;
  279.    }
  280.  
  281.    public int FinalizeInstall() {
  282.       boolean var1 = false;
  283.       short var2 = 0;
  284.  
  285.       try {
  286.          if (this.packageName == null) {
  287.             byte var23 = -1;
  288.             return var23;
  289.          }
  290.  
  291.          this.progress.ConfirmWithUser();
  292.  
  293.          while(this.userChoice == -1) {
  294.             Thread.sleep(10L);
  295.          }
  296.  
  297.          if (this.userChoice != 1) {
  298.             this.AbortInstall();
  299.             short var3 = -210;
  300.             return var3;
  301.          }
  302.  
  303.          Enumeration var6 = this.GetInstallQueue();
  304.          InstallObject var7 = null;
  305.  
  306.          try {
  307.             while(var6.hasMoreElements()) {
  308.                var7 = (InstallObject)var6.nextElement();
  309.  
  310.                try {
  311.                   var7.Complete();
  312.                } catch (SoftUpdateException var17) {
  313.                   if ((short)var17.GetError() != 999) {
  314.                      throw var17;
  315.                   }
  316.  
  317.                   var1 = true;
  318.                }
  319.             }
  320.          } catch (Throwable var18) {
  321.             if (var7 != null) {
  322.                var7.Abort();
  323.             }
  324.  
  325.             while(var6.hasMoreElements()) {
  326.                try {
  327.                   var7 = (InstallObject)var6.nextElement();
  328.                   var7.Abort();
  329.                } catch (Throwable var16) {
  330.                }
  331.             }
  332.  
  333.             throw var18;
  334.          }
  335.  
  336.          if (this.versionInfo != null) {
  337.             var2 = (short)VersionRegistry.installComponent(this.packageName, (String)null, this.versionInfo);
  338.          }
  339.       } catch (SoftUpdateException var19) {
  340.          var2 = (short)var19.GetError();
  341.       } catch (AppletSecurityException var20) {
  342.          var2 = -202;
  343.       } catch (Throwable var21) {
  344.          var21.printStackTrace();
  345.          System.out.println(Strings.error_Unexpected() + " FinalizeInstall");
  346.          var2 = -201;
  347.       } finally {
  348.          if (this.installedFiles != null) {
  349.             this.installedFiles.removeAllElements();
  350.          }
  351.  
  352.          this.CleanUp();
  353.       }
  354.  
  355.       if (var2 == 0 && var1) {
  356.          return 999;
  357.       } else {
  358.          return var2;
  359.       }
  360.    }
  361.  
  362.    public synchronized void AbortInstall() {
  363.       try {
  364.          if (this.installedFiles != null) {
  365.             Enumeration var3 = this.GetInstallQueue();
  366.  
  367.             while(var3.hasMoreElements()) {
  368.                InstallObject var4 = (InstallObject)var3.nextElement();
  369.  
  370.                try {
  371.                   var4.Abort();
  372.                } catch (Throwable var11) {
  373.                }
  374.             }
  375.  
  376.             this.installedFiles.removeAllElements();
  377.             this.installedFiles = null;
  378.          }
  379.  
  380.          this.CloseJARFile();
  381.       } catch (Throwable var12) {
  382.          System.out.println(Strings.error_Unexpected() + " AbortInstall");
  383.          var12.printStackTrace();
  384.       } finally {
  385.          try {
  386.             this.CleanUp();
  387.          } catch (Throwable var10) {
  388.             var10.printStackTrace();
  389.          }
  390.  
  391.       }
  392.  
  393.    }
  394.  
  395.    private synchronized void CleanUp() {
  396.       if (this.progress != null) {
  397.          this.progress.Complete();
  398.       }
  399.  
  400.       this.CloseJARFile();
  401.       this.progress = null;
  402.       this.zigPtr = 0;
  403.       if (this.installedFiles != null) {
  404.          Enumeration var1 = this.GetInstallQueue();
  405.  
  406.          while(var1.hasMoreElements()) {
  407.             InstallObject var2 = (InstallObject)var1.nextElement();
  408.             var2.Abort();
  409.          }
  410.  
  411.          this.installedFiles.removeAllElements();
  412.       }
  413.  
  414.       this.installedFiles = null;
  415.       this.packageName = null;
  416.    }
  417.  
  418.    protected void ScheduleForInstall(InstallObject var1) {
  419.       if (this.progress != null) {
  420.          this.progress.ScheduleForInstall(var1);
  421.       }
  422.  
  423.       this.installedFiles.addElement(var1);
  424.    }
  425.  
  426.    public int AddSubcomponent(String var1, VersionInfo var2, String var3, Object var4, String var5, boolean var6) {
  427.       try {
  428.          if (this.packageName == null) {
  429.             throw new SoftUpdateException(Strings.error_BadPackageNameAS(), -200);
  430.          } else {
  431.             String var8 = this.packageName.length() == 0 ? "" : this.packageName + "/";
  432.             if (var1 != null && var1.length() != 0) {
  433.                if (var1.toUpperCase().startsWith("=COMM=/")) {
  434.                   var1 = (var1.substring(7) + "===").substring(0, var1.length() - 7);
  435.                } else if (var1.charAt(0) != '/') {
  436.                   var1 = var8 + var1;
  437.                }
  438.             } else {
  439.                var1 = var8 + var3;
  440.             }
  441.  
  442.             if (var5 == null || var5.length() == 0) {
  443.                var5 = var3;
  444.             }
  445.  
  446.             boolean var9 = false;
  447.             if (!var6 && var2 != null && VersionRegistry.validateComponent(var1) == 0) {
  448.                VersionInfo var10 = VersionRegistry.componentVersion(var1);
  449.                if (var2.compareTo(var10) > 0) {
  450.                   var9 = true;
  451.                }
  452.             } else {
  453.                var9 = true;
  454.             }
  455.  
  456.             if (var9) {
  457.                InstallFile var7 = new InstallFile(this, var1, var2, var3, (FolderSpec)var4, var5, var6);
  458.                var7.ExtractFile();
  459.                this.ScheduleForInstall(var7);
  460.             }
  461.  
  462.             return 0;
  463.          }
  464.       } catch (SoftUpdateException var11) {
  465.          return var11.GetError();
  466.       } catch (AppletSecurityException var12) {
  467.          return -202;
  468.       } catch (Throwable var13) {
  469.          System.out.println(Strings.error_Unexpected() + "AddSubcomponent");
  470.          return -201;
  471.       }
  472.    }
  473.  
  474.    public int Execute(String var1) {
  475.       try {
  476.          InstallExecute var2 = new InstallExecute(this, var1);
  477.          var2.ExtractFile();
  478.          this.ScheduleForInstall(var2);
  479.          return 0;
  480.       } catch (SoftUpdateException var3) {
  481.          return var3.GetError();
  482.       } catch (AppletSecurityException var4) {
  483.          return -202;
  484.       } catch (Throwable var5) {
  485.          var5.printStackTrace();
  486.          System.out.println(Strings.error_Unexpected() + "Execute");
  487.          return -201;
  488.       }
  489.    }
  490.  
  491.    public int[] Gestalt(String var1) {
  492.       int[] var2 = new int[]{0, 0};
  493.  
  494.       try {
  495.          var2[1] = this.NativeGestalt(var1);
  496.       } catch (SoftUpdateException var4) {
  497.          var2[0] = var4.GetError();
  498.       } catch (Throwable var5) {
  499.          var2[0] = -1;
  500.          System.out.println(Strings.error_Unexpected() + "Gestalt");
  501.       }
  502.  
  503.       return var2;
  504.    }
  505.  
  506.    private native int NativeGestalt(String var1) throws SoftUpdateException;
  507.  
  508.    static {
  509.       Principal var3 = PrivilegeManager.getSystemPrincipal();
  510.       UserTarget var0 = new UserTarget(targetNames[0], var3, UserDialogHelper.targetRiskMedium(), UserDialogHelper.targetRiskColorMedium(), Strings.targetDesc_LimitedInstall(), Strings.getString("s37"), Strings.targetUrl_LimitedInstall());
  511.       var0 = (UserTarget)((Target)var0).registerTarget();
  512.       Target[] var4 = new Target[]{var0};
  513.       UserTarget var1 = new UserTarget(targetNames[1], var3, UserDialogHelper.targetRiskHigh(), UserDialogHelper.targetRiskColorHigh(), Strings.targetDesc_FullInstall(), Strings.getString("s38"), Strings.targetUrl_FullInstall(), var4);
  514.       var1 = (UserTarget)((Target)var1).registerTarget();
  515.       var4[0] = var1;
  516.       UserTarget var2 = new UserTarget(targetNames[2], var3, UserDialogHelper.targetRiskHigh(), UserDialogHelper.targetRiskColorHigh(), Strings.targetDesc_SilentInstall(), Strings.getString("s39"), Strings.targetUrl_SilentInstall(), var4);
  517.       var2 = (UserTarget)((Target)var2).registerTarget();
  518.    }
  519. }
  520.